package com.itheima.electronicbusinesssystem;

import java.util.Arrays;

/**
 * 利用面向对象思想设计电商商品展示功能，默认情况下是按照商品销量排列展示[从小到大]。
 * 可以让用户选择排列方式：按照价格排列展示[从小到大]、按照库存排列展示[从大到小]
 * > 要求：程序必须满足扩展性好。
 * > 提示：
 * > - 定义商品排序接口ProductSort，包含一个sort(Product[]  products)方法用于对商品列表进行排序。
        然后根据不同的排序方式，分别创建实现ProductSort接口的实现类。
 * > - 默认排列使用Comparable接口方式，其他排列方式使用Comparator比较器。
 * >  - 说明：Comparator比较器方式利用Lambda方式编码
 *
 * 商品类：编号、名字、种类、价格、销量、库存
 */
public class Product  implements Comparable<Product> ,ProductSort{
    private String id;
    private String name ;
    private String type;
    private double price;
    private int num;
    private int allNums;

    public Product() {
    }

    public Product(String id, String name, String type, double price, int num, int allNums) {
        this.id = id;
        this.name = name;
        this.type = type;
        this.price = price;
        this.num = num;
        this.allNums = allNums;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public int getAllNums() {
        return allNums;
    }

    public void setAllNums(int allNums) {
        this.allNums = allNums;
    }




    @Override
    public int compareTo(Product o) {
        int i = (int) (this.price - o.price);
        if (i==0){
            return (int) (this.num-o.num);
        }
        return (int) (this.price-o.price);
    }

    @Override
    public String toString() {
        return "Product{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", price=" + price +
                ", num=" + num +
                ", allNums=" + allNums +
                "}\n ";

    }

    @Override
    public void sort(Product[] products) {
        Arrays.sort(products, (str1, str2)-> {
            return (int) (str1.getPrice() - str2.getPrice());

        });
    }
}
